Meta modeling in software engineering includes the analysis, construction, development, and analysis of rules, guidelines, constraints, models and theories applicable and useful for modeling a known class of problems, components, or structures. Software models can model software components, such as user interfaces (UIs), applets, objects, interfaces, and other components, including the relationships between software components and systems. Some software models used in modern software systems can be based on model schemas defining how the model is organized, such as template-based models. Additionally, software structures and components modeled by software models can be subject to semantical rules and guidelines dictating certain requirements for the components not otherwise checked by the schema of the model. For example, UIs can be subject to style guide rules dictating rules and preferences for the layout, formatting, organization of UIs in a system.